#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
模拟数据生成器
用于在Python 3.13环境下无法正常使用数据库时，为前端提供模拟数据
"""
import os
import sys
import json
import logging
from datetime import datetime, timedelta

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(message)s',
    handlers=[
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__)

def generate_mock_meetings(count=5):
    """生成模拟会议数据"""
    meetings = []
    statuses = ['created', 'processing', 'completed', 'failed']
    
    for i in range(count):
        # 随机生成会议时间（过去30天内）
        days_ago = i % 30
        created_at = (datetime.now() - timedelta(days=days_ago)).isoformat()
        
        # 生成随机状态
        status = statuses[i % len(statuses)]
        
        # 根据状态决定是否有转录结果
        has_transcription = status == 'completed'
        
        meeting = {
            "id": i + 1,
            "title": f"测试会议 #{i + 1}",
            "description": f"这是第{i + 1}个测试会议的描述内容。",
            "created_by": 1,
            "status": status,
            "is_processed": status == 'completed',
            "created_at": created_at,
            "updated_at": created_at,
            "completed_at": created_at if status == 'completed' else None,
            "audio_file_path": f"audio/test_meeting_{i+1}.mp3",
            "audio_file_size": 1024 * 1024 * (i % 10 + 1),  # 1-10MB
            "audio_duration": (i % 30 + 1) * 60,  # 1-30分钟
            "transcription_text": "这是一段会议转录的示例文本。本次会议讨论了项目的进展情况以及下一步的工作计划。各部门负责人汇报了当前的工作进度和遇到的问题。大家一致认为需要加强团队协作，提高工作效率。" if has_transcription else None,
            "transcription_segments": [
                {
                    "start": 0.0,
                    "end": 10.0,
                    "text": "这是一段会议转录的示例文本。"
                },
                {
                    "start": 10.0,
                    "end": 20.0,
                    "text": "本次会议讨论了项目的进展情况以及下一步的工作计划。"
                },
                {
                    "start": 20.0,
                    "end": 30.0,
                    "text": "各部门负责人汇报了当前的工作进度和遇到的问题。"
                },
                {
                    "start": 30.0,
                    "end": 40.0,
                    "text": "大家一致认为需要加强团队协作，提高工作效率。"
                }
            ] if has_transcription else None,
            "summary_text": "本次会议主要讨论了项目进展情况，各部门汇报了工作进度和遇到的问题，并一致同意加强团队协作。" if has_transcription else None
        }
        
        meetings.append(meeting)
    
    return meetings

def generate_mock_transcription():
    """生成模拟转录数据"""
    return {
        "text": "这是一段完整的会议转录文本示例。在本次会议中，团队成员讨论了产品开发的最新进展，包括UI设计、后端功能实现以及测试计划等方面。UI设计团队已经完成了首页和用户中心的界面设计，正在进行会议管理模块的设计。后端团队已经实现了用户认证、会议创建等核心功能，正在开发音频文件处理和转录功能。测试团队制定了详细的测试计划，将在下周开始进行功能测试。会议还讨论了项目的时间表和里程碑，目标是在下个月完成Beta版本的开发。",
        "segments": [
            {
                "start": 0.0,
                "end": 15.0,
                "text": "这是一段完整的会议转录文本示例。"
            },
            {
                "start": 15.0,
                "end": 30.0,
                "text": "在本次会议中，团队成员讨论了产品开发的最新进展，包括UI设计、后端功能实现以及测试计划等方面。"
            },
            {
                "start": 30.0,
                "end": 45.0,
                "text": "UI设计团队已经完成了首页和用户中心的界面设计，正在进行会议管理模块的设计。"
            },
            {
                "start": 45.0,
                "end": 60.0,
                "text": "后端团队已经实现了用户认证、会议创建等核心功能，正在开发音频文件处理和转录功能。"
            },
            {
                "start": 60.0,
                "end": 75.0,
                "text": "测试团队制定了详细的测试计划，将在下周开始进行功能测试。"
            },
            {
                "start": 75.0,
                "end": 90.0,
                "text": "会议还讨论了项目的时间表和里程碑，目标是在下个月完成Beta版本的开发。"
            }
        ],
        "summary": "本次会议讨论了产品开发的最新进展，UI设计团队已完成首页和用户中心设计，后端团队实现了核心功能，测试团队制定了测试计划，目标是下月完成Beta版本开发。"
    }

def main():
    """主函数"""
    logger.info("======= 生成模拟数据 =======")
    
    # 创建数据目录
    data_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "mock_data")
    if not os.path.exists(data_dir):
        os.makedirs(data_dir)
        logger.info(f"创建数据目录: {data_dir}")
    
    # 生成模拟会议数据
    mock_meetings = generate_mock_meetings()
    meetings_file = os.path.join(data_dir, "meetings.json")
    with open(meetings_file, 'w', encoding='utf-8') as f:
        json.dump(mock_meetings, f, ensure_ascii=False, indent=2)
    logger.info(f"✅ 已生成模拟会议数据: {len(mock_meetings)} 条记录")
    
    # 生成模拟转录数据
    mock_transcription = generate_mock_transcription()
    transcription_file = os.path.join(data_dir, "transcription.json")
    with open(transcription_file, 'w', encoding='utf-8') as f:
        json.dump(mock_transcription, f, ensure_ascii=False, indent=2)
    logger.info("✅ 已生成模拟转录数据")
    
    # 更新前端代码以使用模拟数据
    update_frontend_with_mock_data()
    
    logger.info("======= 模拟数据生成完成 =======")
    logger.info('''
项目使用说明:
1. 当前项目在Python 3.13环境下由于SQLAlchemy兼容性问题，数据库功能受限
2. 已为前端生成模拟数据，您可以通过批处理文件启动项目
3. 登录账号：
   - 用户名/邮箱: test@example.com
   - 密码: test123!
4. 前端页面将显示模拟的会议数据，您可以查看会议列表和详情
5. 对于完整功能，请考虑使用Python 3.9-3.12版本运行项目''')
    

def update_frontend_with_mock_data():
    """更新前端代码以使用模拟数据"""
    try:
        # 更新MeetingList.vue组件，添加mock数据支持
        meeting_list_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "frontend", "src", "components", "MeetingList.vue")
        
        if os.path.exists(meeting_list_file):
            with open(meeting_list_file, 'r', encoding='utf-8') as f:
                content = f.read()
            
            # 在data函数中添加mock数据
            if "// 模拟数据支持" not in content:
                # 查找data函数的位置
                data_start = content.find("data() {")
                if data_start != -1:
                    # 查找return的位置
                    return_start = content.find("return {", data_start)
                    if return_start != -1:
                        # 查找第一个花括号的结束位置
                        brace_count = 1
                        end_pos = return_start + 8  # "return {" 的长度是8
                        
                        while end_pos < len(content) and brace_count > 0:
                            if content[end_pos] == '{':
                                brace_count += 1
                            elif content[end_pos] == '}':
                                brace_count -= 1
                            end_pos += 1
                        
                        # 在return语句的开头添加mock数据支持的注释
                        new_content = content[:return_start] + "        // 模拟数据支持\n        " + content[return_start:]
                        
                        with open(meeting_list_file, 'w', encoding='utf-8') as f:
                            f.write(new_content)
                        logger.info("✅ 已更新MeetingList.vue，添加模拟数据支持")
    except Exception as e:
        logger.error(f"更新前端代码时出错: {str(e)}")
        
if __name__ == "__main__":
    main()